const mongoose = require('./db.js');

/**
 * 余额记录模型
 * 用于记录用户余额变动的详细信息，包括充值、赠送、扣款等操作
 * 提供完整的资金流水追踪功能
 */
let balanceRecordSchema = new mongoose.Schema({
    transactionId: {
        type: String,
        required: true,
        unique: true,
        index: true
        // 交易流水号，系统自动生成的唯一标识符
    },
    orderNumber: {
        type: String,
        index: true
        // 关联的订单号（可选），用于关联具体的业务订单
    },
    userId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userMod',
        required: true,
        index: true
        // 用户ID，关联到用户表的外键
    },
    userName: {
        type: String,
        required: true
        // 用户名，冗余字段便于查询显示
    },
    amount: {
        type: Number,
        required: true
        // 交易金额，正数表示增加，负数表示减少
    },
    transactionType: {
        type: String,
        required: true,
        enum: ['后台充值', '后台赠送', '后台扣款', '订单扣款'],
        index: true
        // 交易类型：后台充值、后台赠送、后台扣款、订单扣款
    },
    balanceBefore: {
        type: Number,
        required: true
        // 交易前余额
    },
    balanceAfter: {
        type: Number,
        required: true
        // 交易后余额
    },
    createTime: {
        type: Date,
        default: Date.now,
        index: true
        // 创建时间，记录交易发生的时间
    },
    operator: {
        type: String,
        required: true
        // 操作员，记录是谁执行的这次操作
    },
    remark: {
        type: String,
        default: ''
        // 备注信息，可记录额外的说明
    },
    isDeleted: {
        type: Boolean,
        default: false,
        index: true
        // 软删除标记，true表示已删除
    }
});

/**
 * 生成流水号的静态方法
 * 格式：TXN + 时间戳 + 3位随机数
 * 例如：TXN1703123456789123
 */
balanceRecordSchema.statics.generateTransactionId = function() {
    const now = new Date();
    const timestamp = now.getTime().toString(); // 获取当前时间戳
    const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0'); // 生成3位随机数
    return `TXN${timestamp}${random}`; // 返回格式化的交易ID
};

// 创建并导出余额记录模型
let balanceRecordMod = mongoose.model('balanceRecordMod', balanceRecordSchema);

module.exports = balanceRecordMod;